/*
 * @Author: 0x9DEFA478
 * @Date: 2024-01-13 18:32:46
 * @LastEditTime: 2025-07-27 00:35:14
 * @LastEditors: 0x9DEFA478
 * @Description: 
 * 
 */
#ifndef hConfig_H_Config_H_
#define hConfig_H_Config_H_
#include "./H_Option.h"
#ifdef __cplusplus
extern "C"{
#endif




//处理器处理数据方式是否为大端模式
#define vH_Config_IsBigend                                        0

#if defined(__x86_64__)||defined(__aarch64__)
//指针类型大小 该段不能使用sizeof 因为该段会用于条件编译
#define vH_Config_PointerSize                                     8

//函数指针类型大小 该段不能使用sizeof 因为该段会用于条件编译
#define vH_Config_FunctionPointerSize                             8
#else
//指针类型大小 该段不能使用sizeof 因为该段会用于条件编译
#define vH_Config_PointerSize                                     4

//函数指针类型大小 该段不能使用sizeof 因为该段会用于条件编译
#define vH_Config_FunctionPointerSize                             4
#endif

//使用标准库的类型
#define vH_Config_TypeUseSTD                                      1

//是否取消C_Printf H::cout H::clog H::err 的字符编码转换
#define vC_Printf_BypassEncode                                    0




//用于表示长度的数据类型位宽 2 4 8 字节 可选 需要机器有对应位宽的一次性读写指令
#define H_FIFO_SizeOfSizeType                                     4

#if defined(__aarch64__)
//StringFormat %Lf所使用的数据类型
#define H_StringFormat_Support_Lf_Type                            H_StringFormat_Support_Lf_Type_Binary128
#elif defined(__x86_64__)
//StringFormat %Lf所使用的数据类型
#define H_StringFormat_Support_Lf_Type                            H_StringFormat_Support_Lf_Type_Binary80
#if H_StringFormat_Support_Lf_Type==H_StringFormat_Support_Lf_Type_Binary128
//在x86_64上 __float128才是真正的Binary128浮点
#define tH_StringFormat_long_double                               __float128
#endif
#else
//StringFormat %Lf所使用的数据类型
#define H_StringFormat_Support_Lf_Type                            H_StringFormat_Support_Lf_Type_None
#endif

//StringFormat %f使用单精度解析 以大幅降低栈占用; 在只需要打印float级别精度的数据时, 该项非常有用; 但%lf与%Lf仍然使用double与long double解析数据
#define H_StringFormat_f_UseSinglePrecision                       1




#if !vH_Config_TypeUseSTD
#define tH_Type_INT8                                              signed char
#define tH_Type_UINT8                                             unsigned char
#define tH_Type_INT16                                             signed short int
#define tH_Type_UINT16                                            unsigned short int
#define tH_Type_INT32                                             signed long int
#define tH_Type_UINT32                                            unsigned long int
#define tH_Type_INT64                                             signed long long int
#define tH_Type_UINT64                                            unsigned long long int
#endif




#ifdef __cplusplus
}
#endif
#endif //hConfig_H_Config_H_
